package db

import (
	"context"
	"fmt"
	"github.com/redis/go-redis/v9"
	"time"
)

var ctx = context.Background()

var Rdb *redis.Client

func InitRedis() {
	rdb := redis.NewClient(&redis.Options{
		Addr:     "127.0.0.1:6379",
		Password: "",
		DB:       0,
	})

	pong, err := rdb.Ping(ctx).Result()
	if err != nil {
		fmt.Printf("连接redis出错，错误信息：%v", err)
	}
	fmt.Println("成功连接redis" + pong)
	Rdb = rdb
}

func TestGetAllKey() {
	keys, err := Rdb.Keys(ctx, "*").Result()
	if err != nil {
		panic(err)
	}
	fmt.Println(keys)

	vType, err := Rdb.Type(ctx, "dir:redis").Result()
	if err != nil {
		panic(err)
	}
	fmt.Println(vType) //string

	// n, err1 := Rdb.Del(ctx, "user").Result()
	// if err1 != nil {
	// 	panic(err1)
	// }
	// fmt.Printf("成功删除了 %v 个\n", n)

	//设置一分钟的有效期
	// Rdb.Expire(ctx, "redis.net", time.Minute)

	// //获取剩余有效期,单位:秒(s)
	// ttl, err := Rdb.TTL(ctx, "redis.net").Result()
	// if err != nil {
	// 	panic(err)
	// }
	// fmt.Println(ttl)
	err = Rdb.Set(ctx, "GoRedisTestkey1", "value1", 0).Err()
	if err != nil {
		panic(err)
	}
	err = Rdb.Set(ctx, "GoRedisTestkey1", 10, 0).Err()
	if err != nil {
		panic(err)
	}

	err1 := Rdb.SetNX(ctx, "GoRedisTestkey1", "value", time.Hour*2).Err()
	if err1 != nil {
		panic(err1)
	}

	val, err := Rdb.Get(ctx, "GoRedisTestkey1").Result()
	if err == redis.Nil {
		fmt.Println("key不存在")
	} else {
		fmt.Printf("key: %v\n", val)
	}

	val1, err := Rdb.Incr(ctx, "GoRedisTestkey1").Result()
	if err != nil {
		panic(err)
	}
	fmt.Printf("key当前的值为: %v\n", val1)
	// fmt.Printf("key: %v\n", val)
	Rdb.IncrBy(ctx, "GoRedisTestkey1", 12).Result()
	val2, err := Rdb.Get(ctx, "GoRedisTestkey1").Result()
	if err == redis.Nil {
		fmt.Println("key不存在")
	} else {
		fmt.Printf("key: %v\n", val2)
	}
	n, err := Rdb.LPush(ctx, "GoRedisList", 1, 2, 3).Result()
	fmt.Println(n)
	// Rdb.LSet(ctx, "GoRedisList", 0, 100).Err()
	// Rdb.LSet(ctx, "GoRedisList", 1, 101).Err()
	Rdb.LInsert(ctx, "GoRedisList", "before", 100, 123)
	Rdb.LInsert(ctx, "GoRedisList", "after", 100, 124)

	Rdb.ZAdd(ctx, "zGoRedisSet", redis.Z{Score: 0, Member: "LiLi"})
	// Rdb.ZAdd(ctx, "zGoRedisSet", redis.Z{Score: 1, Member: "LiLi"})
	Rdb.ZAdd(ctx, "zGoRedisSet", redis.Z{Score: 2, Member: "LiLy"})
	Rdb.ZAdd(ctx, "zGoRedisSet", redis.Z{Score: 10, Member: "Qing"})

	Rdb.HSet(ctx, "BaseInfo", "key1", "value1", "key2", "value2")
	Rdb.HSet(ctx, "BaseInfo", []string{"key3", "value3", "key4", "value4"})

	M := make(map[string]interface{})
	M["Image100036"] = 1
	M["Head100036"] = "fdsdf"
	M["Image100037"] = 3
	M["Head100037"] = "fdsdf3"
	Rdb.HSet(ctx, "BaseInfo", M)
}
